<?php

require_once 'Base/GroupsRow.php';

/**
 * Generated Model class.
 */
class GroupsRow extends Base_GroupsRow
{
	/** @var integer */
	protected $_stay = null;
	/** @var integer */
	protected $_turnsCount = null;
	/** @var Zend_Db_Rowset */
	protected $_turnsRowset = null;
	
	/**
	 * Возвращает true, если хоть одна из очередей в группе простаивает (нет постов).
	 *
	 * @return boolean
	 */
	public function isStay()
	{
		if ($this->_stay !== null) {
			return $this->_stay;
		}
		
		$turns = $this->getTurnRowset();
		foreach ($turns as $turn) {
			if ($turn->isStay()) {
				return true;
			}
		}
		
		return false;
	}
	
	/**
	 * Возвращает количество очередей, привязанных к группе.
	 * 
	 * @return integer
	 */
	public function getTurnsCount()
	{
		$select = TurnPeer::getInstance()->select();
		$select->where('group_id = ?', $this->getId());
		$count = TurnPeer::getInstance()->fetchCount($select);
		return $count;
	}
	
	/**
	 * Возвращает количество простаивающих очередей в группе.
	 * 
	 * @return integer
	 */
	public function getTurnsStayCount()
	{
		$turnsRowset = $this->getTurnRowset();
		
		$turnsStayCount = 0;
		foreach ($turnsRowset as $turn) {
			/** @var TurnRow $turn */
			if ($turn->isStay()) {
				$turnsStayCount++;
			}
		}
		
		return $turnsStayCount;
	}
	
	/**
	 * Ленивая кэш-обертка для метода, вытаскивающего все очереди группы из базы.
	 * 
	 * @return Db_Rowset
	 */
	public function getTurnRowset()
	{
		if ($this->_turnsRowset instanceof Zend_Db_Rowset) {
			return $this->_turnsRowset;
		}
		
		$rowset = $this->getTurnRowsetByGroupId();
		$this->_turnsRowset = $rowset;
		return $rowset;
	}


	/**
	 * Возвращает время, когда начнется простой группы.
	 *
	 * @return integer timestamp
	 */
	public function whenStay()
	{
		$turns = $this->getTurnRowset();

		$f = 1;
		foreach ($turns as $turn) {
			$stayTime = $turn->whenStay();
			
			// Игнорирем первую итерацию
			if ($f) {
				$f = null;
				$stayMin = $stayTime;
				continue;
			}
			
			if ($stayTime < $stayMin) {
				$stayMin = $stayTime;		
			}
		}
		
		return $stayMin;
	}
}

